/**
 * # 数据实体类:
 *  App - App
 * 
 * # 描述:
 *  已经安装的 App。
 *  
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package com.waln.authority.organization.data;

/**
 * App。
 * 
 * 已经安装的 App。
 */
public final class App extends pittypat.DataModel {
	/**
	 * Id。
	 */
	public java.util.UUID id;

	/**
	 * 开发者代码。
	 * <p>
	 * App 开发者代码。
	 */
	public String developerCode;

	/**
	 * 开发者名称。
	 * <p>
	 * App 开发者的名称。
	 */
	public String developerName;

	/**
	 * App 标识符。
	 * <p>
	 * App 的标识符。
	 */
	public String identifier;

	/**
	 * App 名称。
	 * <p>
	 * App 的名称。
	 */
	public String name;

	/**
	 * App 版本。
	 * <p>
	 * App 的版本号。
	 */
	public String version;

	/**
	 * 模块数目。
	 * <p>
	 * App 中模块的数目。
	 */
	public Short moduleCount;

	/**
	 * 描述。
	 * <p>
	 * 对 App 的描述信息。
	 */
	public String description;

	/**
	 * 位置。
	 * <p>
	 * 在导航列表中，App 的先后顺序，这是由系统管理员设置的顺序。
	 */
	public Integer position;

	/**
	 * 安装时间。
	 * <p>
	 * App 的安装时间。
	 */
	public java.time.LocalDateTime installTime;

	/**
	 * 初始化 App 类的一个新实例。
	 */
	public App() {
		super();

		// Id
		this.id = null;
		// 开发者代码
		this.developerCode = null;
		// 开发者名称
		this.developerName = null;
		// App 标识符
		this.identifier = null;
		// App 名称
		this.name = null;
		// App 版本
		this.version = null;
		// 模块数目
		this.moduleCount = null;
		// 描述
		this.description = null;
		// 位置
		this.position = null;
		// 安装时间
		this.installTime = null;
	}

	/**
	 * 从一个 DbDataReader 中读取此对象。
	 * 
	 * @param reader
	 * 			包含对象数据的 DbDataReader 对象。
	 * 
	 * @throws IllegalArgumentException
	 * 
	 * @see pittypat.DataModel#read(pittypat.data.DbDataReader)
	 * @see pittypat.data.DbDataReader
	 */
	@Override
	public void read(pittypat.data.DbDataReader reader) throws IllegalArgumentException {
		if (reader == null) {
			throw new IllegalArgumentException("reader 为 null。");
		}

		// Id
		this.id = reader.getUuid("id", this.id);
		// 开发者代码
		this.developerCode = reader.getString("developerCode", this.developerCode);
		// 开发者名称
		this.developerName = reader.getString("developerName", this.developerName);
		// App 标识符
		this.identifier = reader.getString("identifier", this.identifier);
		// App 名称
		this.name = reader.getString("name", this.name);
		// App 版本
		this.version = reader.getString("version", this.version);
		// 模块数目
		this.moduleCount = reader.getShort("moduleCount", this.moduleCount);
		// 描述
		this.description = reader.getString("description", this.description);
		// 位置
		this.position = reader.getInteger("position", this.position);
		// 安装时间
		this.installTime = reader.getDateTime("installTime", this.installTime);
	}

	/**
	 * 将当前对象作为 JSON 字符串写入指定的文本流。
	 * 
	 * @param writer
	 * 			目标文本流。
	 * 
	 * @throws IllegalArgumentException
	 * @throws java.io.IOException
	 * 
	 * @see pittypat.DataModel#write(java.io.Writer)
	 */
	@Override
	public void write(java.io.Writer writer) throws IllegalArgumentException, java.io.IOException {
		if (writer == null) {
			throw new IllegalArgumentException("writer 为 null。");
		}

		writer.write('{');

		// Id
		writer.write("\"id\":");
		pittypat.Json.write(writer, this.id);
		writer.write(',');

		// 开发者代码
		writer.write("\"developerCode\":");
		pittypat.Json.write(writer, this.developerCode);
		writer.write(',');

		// 开发者名称
		writer.write("\"developerName\":");
		pittypat.Json.write(writer, this.developerName);
		writer.write(',');

		// App 标识符
		writer.write("\"identifier\":");
		pittypat.Json.write(writer, this.identifier);
		writer.write(',');

		// App 名称
		writer.write("\"name\":");
		pittypat.Json.write(writer, this.name);
		writer.write(',');

		// App 版本
		writer.write("\"version\":");
		pittypat.Json.write(writer, this.version);
		writer.write(',');

		// 模块数目
		writer.write("\"moduleCount\":");
		pittypat.Json.write(writer, this.moduleCount);
		writer.write(',');

		// 描述
		writer.write("\"description\":");
		pittypat.Json.write(writer, this.description);
		writer.write(',');

		// 位置
		writer.write("\"position\":");
		pittypat.Json.write(writer, this.position);
		writer.write(',');

		// 安装时间
		writer.write("\"installTime\":");
		pittypat.Json.write(writer, this.installTime);

		writer.write('}');
	}
}
